1. Field of the Invention
The present invention relates to the field of data communication. In particular, the present invention describes a method and apparatus for communicating data, where the data is communicated independent of the platform, and the data is self describing.
2. Description of Related Art
In early computer systems, programs were executed sequentially. The instructions for a first program would be read into a large mainframe and the result would be computed. Then another program's instructions would be read into the computer and those results would be computed. Now, computer systems can run a number of programs, appearing to the user to be executing simultaneously. This concept has even evolved to the use of networks where one computer is running one application while another computer networked to the first computer runs a second application. To improve performance of modern computer systems, it is desirable for the computers to be able to communicate information between the various programs (applications).
In previous systems, one application would be written to be able to communicate data with a second application. For example, if two applications wanted to share information, the first application would be designed to include a number of variables that the second application would understand. Data could then be inserted in the variables and transmitted from the first application to the second application. The second application would have been written to understand these variables and to extract the information from them. Thus, two applications could communicate. However, as computer systems and the networks they run on get larger and larger, the number of applications needing to share information has grown substantially. For example, it's conceivable to have a thousand applications running on 500 computer systems, all of those applications then needing to share information. Some applications are likely to be of an earlier version, than others. New applications will be added, having new functions and needing to share more and different information. Some applications will only know how to communicate with only a few of the other applications. However, it is desirable that all the applications would be able to share at least some data with each other.
One possible solution to this problem has been to define a very small set of known data components. For example, in Simple Network Management Protocol, IETF Request For Comments (RFC) 1067 (SNMP), two applications must know all the data components that are to be shared between the two applications. For example, if a first application transmits the time and date and a file name to a second application, the second application would have to have been written to understand that the time and date and the file name would be received from a first application. Further in some protocols, the ordering of the data being transmitted was critical. For example, the first application might send the time, date and file name in that order and the second application would understand that the first piece of information would be the time, the next piece of information would be the date, and the next piece of information would be the file name. If the authors of the first application wished to change this order, or to add a new variable to the information, the second application would also have to be rewritten to incorporate these changes. Thus what is needed is a system where the data to be transmitted is not ordered, that is not necessarily predefined, and in particular, allows older versions of applications exchange information with newer versions of applications.
Another prior art system is available from International Business Machines, of New York. IBM has created a distributed data management (DDM.TM.) system to transmit information from one computer system to another computer system in a heterogeneous network. DDM, for example, allows a personal computer to communicate file data with a mainframe. A personal computer will send a request for information containing a list of objects. The list might include, for example, a file name, a record number and file type. The list can contain any number of objects in any order. Prior to exchanging any requests for data, the DDM applications must first negotiate what level of service will be provided. For example, at the lowest level, relatively basic information can be exchanged. If the mainframe application and the PC application both support a higher level of DDM implementation, then more information can be exchanged. For example, relational database access may be provided by the mainframe at a higher level of DDM support.
DDM has a number of shortcomings. First, DDM supports only point-to-point communications, that is, a request for information sent by the PC to the mainframe cannot then be used by another level of the implementation on, for example, a second PC. Thus, if the PC implements level two of DDM, the mainframe implements level one and a second PC implements level two, the first PC can only exchange level one information with the mainframe. The first PC would not be able to communicate level two information to the second PC without directly communicating with the second PC. A second shortcoming related to DDM, is that a level one, or earlier version application, cannot accept objects related to a higher level application. Therefore, for example, assume two PCs are in communication. The first PC runs a level one implementation and the second PC runs a level two implementation. The following problem occurs. If the second application did not negotiate the levels prior to attempting to transmit information to the first application, the second application would not understand that the first application only implements level one. That is, a request from the second application may include data objects that are not supported by the first application. DDM requires that the first application transmit a reply a message that that object is not supported.
Therefore, what is required is a system that allows applications to share data easily and efficiently. The system should be extensible, and should not require prior negotiation of data interfaces. The system should be able to work on a single computer executing a number of applications, as well as, on a number of computers running a number of applications. It is also desirable to have a system which allows a number of different versions of a single application to continue to communicate with other versions of that application.